package br.gov.sedurb.ws.client;


import br.gov.se.seplag.RequestFixo;
import br.gov.se.seplag.anexoprocessosatendimento.AnexoProcessosAtendimento;
import br.gov.se.seplag.anexoprocessosatendimento.AnexoProcessosAtendimento_Service;
import br.gov.se.seplag.anexoprocessosatendimento.ErroInfoMessage;
import br.gov.se.seplag.anexoprocessosatendimento.ParametroIncluirPorAtendimento;
import br.gov.se.seplag.anexoprocessosatendimento.ParametroListarAnexosValidos;
import br.gov.se.seplag.anexoprocessosatendimento.ParametroListarPorAtendimento;
import br.gov.se.seplag.anexoprocessosatendimento.ResultadoIncluirPorAtendimento;
import br.gov.se.seplag.anexoprocessosatendimento.ResultadoListarAnexosValidos;
import br.gov.se.seplag.anexoprocessosatendimento.ResultadoListarPorAtendimento;
import br.gov.se.seplag.ebo.v1.DocumentoNecessarioAtendimento;
import br.gov.se.seplag.ebo.v1.ListaDocumentoNecessarioAtendimento;

import br.gov.sedurb.util.JSFUtils;

import java.math.BigInteger;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.xml.ws.WebServiceRef;


// !THE CHANGES MADE TO THIS FILE WILL BE DESTROYED IF REGENERATED!
// This source file is generated by Oracle tools
// Contents may be subject to change
// For reporting problems, use the following
// Version = Oracle WebServices (11.1.1.0.0, build 130224.1947.04102)

public class AnexoProcessosAtendimentoSOAPClient extends WSClient<AnexoProcessosAtendimento> {
    @WebServiceRef
    private AnexoProcessosAtendimento_Service anexoProcessosAtendimento_Service;
    private static AnexoProcessosAtendimentoSOAPClient obj;

    public static AnexoProcessosAtendimentoSOAPClient getInstance() {
        obj = new AnexoProcessosAtendimentoSOAPClient();
        return obj;
    }
    
    private AnexoProcessosAtendimentoSOAPClient() {
        super();
    }

    public List<String> incluirPorAtendimento(long cpfLong,
                                              Collection<DocumentoNecessarioAtendimento> listaDocumento,
                                              String nomeServico) {

        ListaDocumentoNecessarioAtendimento listaDoc =
            new ListaDocumentoNecessarioAtendimento();
        listaDoc.getDocumentoNecessarioAtendimento().addAll(listaDocumento);

        ParametroIncluirPorAtendimento parameters =
            new ParametroIncluirPorAtendimento();
        parameters.setCodigoCPF(BigInteger.valueOf(cpfLong));
        parameters.setListaDocumentos(listaDoc);
        parameters.setNomeServico(nomeServico);

        List<String> listaProtocolo = new ArrayList<String>();

        try {

            ResultadoIncluirPorAtendimento resultado =
                getPort().incluirPorAtendimento(parameters,
                                                RequestFixo.cabecalho());

            listaProtocolo =
                    resultado.getListaCodigoProtocolo().getCodigoProtocolo();

        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }

        return listaProtocolo;
    }

    public List<DocumentoNecessarioAtendimento> listarAnexosValidos(long cpfLong) {

        ParametroListarAnexosValidos parameters =
            new ParametroListarAnexosValidos();
        parameters.setCodigoCPF(BigInteger.valueOf(cpfLong));
        parameters.setNumeroMaximoResultados(BigInteger.valueOf(200L));
        parameters.setNumeroPrimeiraLinha(BigInteger.valueOf(1L));

        List<DocumentoNecessarioAtendimento> lista =
            new ArrayList<DocumentoNecessarioAtendimento>();

        try {
            ResultadoListarAnexosValidos resultado =
                getPort().listarAnexosValidos(parameters,
                                              RequestFixo.cabecalho());

            lista =
                    resultado.getListaDocumentos().getDocumentoNecessarioAtendimento();

        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }

        return lista;
    }

    public List<DocumentoNecessarioAtendimento> listarPorAtendimento(long cpfLong,
                                                                     String nomeServico) {

        ParametroListarPorAtendimento parameters =
            new ParametroListarPorAtendimento();
        parameters.setCodigoCPF(BigInteger.valueOf(cpfLong));
        parameters.setNomeServico(nomeServico);
        
        List<DocumentoNecessarioAtendimento> lista = new ArrayList<DocumentoNecessarioAtendimento>();

        try {
            ResultadoListarPorAtendimento resultado = getPort().listarPorAtendimento(parameters, RequestFixo.cabecalho());
            
            lista = resultado.getListaDocumentos().getDocumentoNecessarioAtendimento();

        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
            } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }

        return lista;
    }

    public AnexoProcessosAtendimento criarPortType() {

        anexoProcessosAtendimento_Service =
                new AnexoProcessosAtendimento_Service();
        AnexoProcessosAtendimento port =
            anexoProcessosAtendimento_Service.getAnexoProcessosAtendimentoSOAP();

        return port;

    }
}
